【初心者向け】Amazon ECSでApacheを起動したい~AWS Fargate利用~
こんにちは!コンサル部のinomaso(@inomasosan)です。
Amazon ECSを案件で使用することになったので、絶賛キャッチアップ中です。
今回はApacheのコンテナを題材に、ローカル環境での起動方法やAWSマネージメントコンソールで検証用に、Apacheコンテナを起動する最小環境を構築して理解を深めていきます。
この記事で学べること
- ローカル環境でApache httpdイメージからDockerコンテナ起動
- Amazon ECSでAWS Fargateを利用し、Apache httpイメージからDockerコンテナ起動
環境
- macOS Big Sur 11.4
- Docker Desktop 3.6.0
構成図
構成を簡素化するために今回はALBを利用せず、タスクのパブリックIPからアクセス確認します。
ローカル環境でhttpdイメージからコンテナ起動
Dockerコンテナ起動
まずは挙動を確認したいので、ローカル環境にてhttpdイメージをもとにコンテナを起動してみます。
今回は1回限り(フォアグラウンド)の実行のため-d
というコンテナ実行をバックグラウンドで行うオプションは利用しません。
また--rm
オプションにより、ターミナルでCtrl+C
でコンテナの終了時に自動的にコンテナをクリーンアップし、ファイルシステムを削除するようにします。
% docker run --rm -p 8080:80 httpd AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message [Thu Aug 26 08:53:49.809953 2021] [mpm_event:notice] [pid 1:tid 140370581845120] AH00489: Apache/2.4.48 (Unix) configured -- resuming normal operations [Thu Aug 26 08:53:49.814228 2021] [core:notice] [pid 1:tid 140370581845120] AH00094: Command line: 'httpd -D FOREGROUND'
Apacheアクセス確認
コンテナを起動できたら、Chrome等のWebブラウザにてhttp://localhost:8080/
へアクセスし、It works!と表示されることを確認できました。
Amazon ECSでhttpdイメージからコンテナ起動
以下手順は旧ECSコンソールで実施したものとなります。
タスク定義・コンテナ定義作成
AWSマネージメントコンソールのECSコンソールから、タスク定義
→新しいタスク定義の作成
をクリックします。
起動タイプの互換性にFARGATE
を選択し、次のステップ
をクリックします。
タスク定義名に任意の名前を入力します。
タスクメモリとタスクCPUはそれぞれ最小の値を選択します。
コンテナ定義を追加するためコンテナの追加
をクリックします。
コンテナ名に任意の名前を入力します。
イメージはApache httpdイメージを使用するのでhttpd
を指定します。
ポートマッピングはawsvpcネットワークモードを使用するので、containerPort
のみを指定します。
上記以外の項目はデフォルトのまま、一番下の 作成
をクリックします。
クラスター作成
AWSマネージメントコンソールのクラスター
→クラスターの作成
をクリックします。
ネットワーキングのみ
を選択し、次のステップ
をクリックします。
クラスター名に任意の名前を入力します。
VPCの作成にチェックを入れ、新規VPCを作成します。
上記以外の項目はデフォルトのまま、一番下の 作成
をクリックします。
サービス作成
AWSマネージメントコンソールから、先ほど作成したクラスターを選択し、サービス
→作成
をクリックします。
起動タイプにFARGATE
を選択します。
タスク定義のファミリーに先ほど作成したタスクを選択し、リビジョンがlatestであることを確認します。
※検証のためにタスク定義は何回か作成し直したため、画像は5(latest)となっています。
サービス名に任意の名前を入力します。
タスクの数は最小の1を指定します。
上記以外の項目はデフォルトのまま、一番下の次のステップ
をクリックします。
サブネットにクラスタ作成時に新規作成したものを2つ指定します。
上記以外の項目はデフォルトのまま、一番下の次のステップ
をクリックします。
Auto Scalingは特に設定せず、次のステップ
をクリックします。
最後に確認ステップが表示されるので、一番下のサービスの作成
をクリックします。
最後にクラスターのサービスで、作成したタスクのステータスがRunningであることを確認します。
Apacheアクセス確認
今回はALBを作成していないため、タスクのパブリックIPからアクセス確認します。
Chrome等のWebブラウザにて、パブリックIPでアクセスし、It works!と表示されることを確認できました。
後片付け
先ほど作成したクラスターの画面でクラスターの削除
をクリックします。
ただ、2021年8月26日時点だと削除中にエラーが出てしまいます。
エラー原因は、サービス定義で作成されたセキュリティグループによるものです。
クラスターは裏でCloudFormationにて作成されている一方、サービス定義はCloudFormarionによる作成ではないので、VPC削除時にセキュリティグループが残っているためエラーとなります。
そのため手動にてサービス定義のセキュリティグループを削除してから、もう一度クラスターの削除
を実行する必要があります。
参考ブログ
まとめ
ECSはハンズオン等で何度か構築したことはありましたが、改めてAWSマネージメントコンソールで実施したところ、意外と苦戦しましたものの理解が深まったかと思います。
この記事が、どなたかのお役に立てば幸いです。それでは!